#include<iostream>
#include<signal.h>
#include<cstring>
#include<unistd.h>
using namespace std;

void PendingPrint()
{
    sigset_t pending;
    sigpending(&pending);
    for (int signo = 31; signo >= 1; signo--)
    {
        if (sigismember(&pending, signo))
        {
            cout << "1";
        }
        else{
            cout << "0";
        }
    }
    cout << endl;
}
void handler(int signo)
{
    cout << "......process get a signal: " << signo << endl;
    while (true)
    {
        PendingPrint();
        sleep(1);
    }
}
int main()
{
    struct sigaction act, oact;
    memset(&act, 0, sizeof(act));
    memset(&oact, 0, sizeof(oact));

    sigemptyset(&act.sa_mask);
    sigaddset(&act.sa_mask, 1);
    sigaddset(&act.sa_mask, 3);
    sigaddset(&act.sa_mask, 4);
    act.sa_handler = handler; // SIG_IGN SIG_DFL
    sigaction(2, &act, &oact);

    while(true)
    {
        cout << "i am a process, pid is " << getpid() << endl;
        sleep(1);
    }

    return 0;
}

// void handler(int signo)
// {
//     cout << "......process get a signal: " << signo << endl;
// }
// int main()
// {
//     struct sigaction act, oact;
//     memset(&act, 0, sizeof(act));
//     memset(&oact, 0, sizeof(oact));

//     act.sa_handler = handler;
//     sigaction(2, &act, &oact);

//     while(true)
//     {
//         cout << "i am a process, pid is " << getpid() << endl;
//         sleep(1);
//     }

//     return 0;
// }


// int a = 0;
// int main()
// {
//     cout << "::a = "<< a << endl;
//     int a = 1;
//     {
//         cout << "::a = "<< ::a << endl;
//         cout << "a = "<< a << endl;        

//         int a = 5;
//         cout << "a = "<< a << endl;
//     }
//     cout << "::a = "<< ::a << endl;
//     cout << "a = "<< a << endl;

//     // int b = 0;
//     // cout << "b = " << b << endl;
//     // {
//     //     b++;
//     //     ::a++;
//     // cout << "::a = "<< a << endl;
//     // cout << "b = " << b << endl;
//     // }
//     // cout << "a = "<< a << endl;
//     // cout << "b = " << b << endl;
//     // b = 12;
//     // cout << "b = " << b << endl;
//     // cout << "a = " << a << endl;


//     return 0;
// }

